package org.jeecg.modules.demo.qualityOrder.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.jeecg.common.api.dto.message.TemplateMessageDTO;
import org.jeecg.common.system.api.ISysBaseAPI;
import org.jeecg.common.system.vo.LoginUser;
import org.jeecg.modules.demo.pubuyorder.entity.PuBuyOrder;
import org.jeecg.modules.demo.pubuyorder.mapper.PuBuyOrderMapper;
import org.jeecg.modules.demo.qualityOrder.entity.PuBuyOrderToQualityOrder;
import org.jeecg.modules.demo.qualityOrder.entity.PuQualityOrder;
import org.jeecg.modules.demo.qualityOrder.mapper.PuBuyOrderToQualityOrderMapper;
import org.jeecg.modules.demo.qualityOrder.mapper.PuQualityOrderMapper;
import org.jeecg.modules.demo.qualityOrder.service.IPuQualityOrderService;
import org.jeecg.modules.demo.utils.BigDecimalUtil;
import org.jeecg.modules.demo.utils.generateOddUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;

import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * @Description: 质检单
 * @Author: jeecg-boot
 * @Date:   2021-11-26
 * @Version: V1.0
 */
@Service
public class PuQualityOrderServiceImpl extends ServiceImpl<PuQualityOrderMapper, PuQualityOrder> implements IPuQualityOrderService {
	
	@Resource
	private PuQualityOrderMapper puQualityOrderMapper;
	@Resource
	private PuBuyOrderToQualityOrderMapper puBuyOrderToQualityOrderMapper;
	@Resource
	private PuBuyOrderMapper puBuyOrderMapper;

	@Autowired
	private ISysBaseAPI sysBaseAPI;

	private static final String TITLE = "单据审核";

	private String getMessage(String name,String date) {
		String str ="由【"+name+"】于【"+date+"】发起的采购质检单需要您的审核，请及时查看！";
		return str;
	}
	
	@Override
	public List<PuQualityOrder> selectByMainId(String mainId) {
		return puQualityOrderMapper.selectByMainId(mainId);
	}

	@Override
	public List<String>  selectByPoOrder(String id){
		return puQualityOrderMapper.selectByPoOrder(id);
	}


	@Override
	public String getMaxCode(){
		return puQualityOrderMapper.getMaxCode();
	}

	@Override
	public List<PuQualityOrder> getZJDataList(String str){
		return puQualityOrderMapper.getZJDataList(str);
	}



	@Override
	@Transactional
	public boolean addPuQualityOrder(String tenantId, PuQualityOrder puQualityOrder){
		try{
			String precode = puBuyOrderMapper.getTeantCodeById(Integer.parseInt(tenantId)).toUpperCase();
			puQualityOrder.setId(null);
			String str = puQualityOrderMapper.getMaxCode();
			Map<String,String> map = new HashMap<>();
			map.put("maxCode",str==null?null:str);
			String name =precode+ "ZJ_";
			String resultCode = generateOddUtil.createCode(map,name);
			puQualityOrder.setQoNum(resultCode);
			puQualityOrder.setShenhe(0);
			puQualityOrder.setShanchu(0);
			puQualityOrder.setRuku(0);
			puQualityOrder.setCreateTime(new Date());
			puQualityOrder.setShTime(null);
			if(Integer.parseInt(puQualityOrder.getQoType())==3){
				puQualityOrder.setDocumentType(1);
				puQualityOrder.setTradecode(null);
				puQualityOrderMapper.insert(puQualityOrder);
			}else{
				PuBuyOrderToQualityOrder puBuyOrderToQualityOrder = puBuyOrderToQualityOrderMapper.getByOrderNumber(puQualityOrder.getPoOrder());
				puBuyOrderToQualityOrder.setZhijian(1);
				puQualityOrder.setDocumentType(puBuyOrderToQualityOrder.getDocumentType()==1?1:0);
				puQualityOrder.setPsTaxrat(puQualityOrder.getPsTaxrat()==null?puBuyOrderToQualityOrder.getPsTaxrat():puQualityOrder.getPsTaxrat());
				puQualityOrder.setTradecode(puBuyOrderToQualityOrder.getTradecode()!=null?puBuyOrderToQualityOrder.getTradecode():null);
				Double total = BigDecimalUtil.add(puBuyOrderToQualityOrder.getZjtotal().doubleValue(),puQualityOrder.getQoQuantity().doubleValue());
				puBuyOrderToQualityOrder.setZjtotal(new BigDecimal(total));
				puQualityOrderMapper.insert(puQualityOrder);
				puBuyOrderToQualityOrderMapper.updateById(puBuyOrderToQualityOrder);
			}
			LoginUser user = sysBaseAPI.getUserById(puQualityOrder.getPoStaff());
			TemplateMessageDTO templateMessageDTO = new TemplateMessageDTO();
			templateMessageDTO.setFromUser("管理员");
			templateMessageDTO.setToUser(puQualityOrder.getSaleman()+",");
			templateMessageDTO.setTitle(TITLE);
			templateMessageDTO.setTemplateCode("order");
			Map<String, String> templateParam = new HashMap<>();
			SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String date= simpleDateFormat.format(new Date());
			templateParam.put("ts_date",date);
			templateParam.put("ts_content", getMessage(user!=null?user.getRealname():"业务员不存在！", date));
			templateParam.put("checkOrder",puQualityOrder.getQoNum());
			templateParam.put("cd_url","/qualityOrder/puBuyOrderToQualityOrder/listPuQualityOrderByMainId");
			templateMessageDTO.setTemplateParam(templateParam);
			sysBaseAPI.sendTemplateAnnouncement(templateMessageDTO);
			return true;
		}catch (Exception e){
			e.printStackTrace();
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
			return false;
		}
	}

	@Override
	@Transactional
	public boolean updateOrder( PuQualityOrder puQualityOrder){
		try{
			PuBuyOrder puBuyOrder = puBuyOrderMapper.getByNumber(puQualityOrder.getPoOrder());
			PuQualityOrder order = puQualityOrderMapper.getByQoNum(puQualityOrder.getQoNum());
			Double zitotal = BigDecimalUtil.sub(puBuyOrder.getZjtotal().doubleValue(),order.getQoQuantity().doubleValue());
			puBuyOrder.setZjtotal(new BigDecimal(BigDecimalUtil.add(zitotal,puQualityOrder.getQoQuantity().doubleValue())));
			puBuyOrderMapper.updateById(puBuyOrder);
			puQualityOrderMapper.updateById(puQualityOrder);
			return true;
		}catch (Exception e){
			e.printStackTrace();
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
			return false;
		}
	}


	@Override
	@Transactional
	public boolean deletePuQualityOrder(PuQualityOrder puQualityOrder){
		try{
			if(puQualityOrder.getPoOrder()!=null){
				PuBuyOrder puBuyOrder = puBuyOrderMapper.getByNumber(puQualityOrder.getPoOrder());
				Double total = BigDecimalUtil.sub(puBuyOrder.getZjtotal().doubleValue(),puQualityOrder.getQoQuantity().doubleValue());
				if(total<0){
					puBuyOrder.setZjtotal(new BigDecimal(0.000));
				}else{
					puBuyOrder.setZjtotal(new BigDecimal(total));
				}
				puBuyOrderMapper.updateById(puBuyOrder);
			}
			puQualityOrderMapper.deleteById(puQualityOrder.getId());
			return true;
		}catch (Exception e){
			e.printStackTrace();
			TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
			return false;
		}
	}

	@Override
	public PuQualityOrder getByQoNum(String str){
		return puQualityOrderMapper.getByQoNum(str);
	}
}
